// internal/apps/auth/models/token_session.go
package models

import (
	"star-go-app/internal/domain/entities/base_model"
	"time"
)

// LoginSession 登录会话模型
// 用于记录用户的登录token信息，实现会话管理
type LoginSession struct {
	base_model.BaseModel
	UserID       uint64    `gorm:"not null;index" json:"user_id"`          // 用户ID
	AccessToken  string    `gorm:"size:500;uniqueIndex;not null" json:"-"` // 访问令牌(敏感信息不返回)
	RefreshToken string    `gorm:"size:500;uniqueIndex;not null" json:"-"` // 刷新令牌(敏感信息不返回)
	DeviceInfo   string    `gorm:"size:200" json:"device_info"`            // 设备信息
	IPAddress    string    `gorm:"size:45" json:"ip_address"`              // IP地址
	UserAgent    string    `gorm:"size:500" json:"user_agent"`             // 用户代理
	LoginTime    time.Time `gorm:"not null" json:"login_time"`             // 登录时间
	ExpiresAt    time.Time `gorm:"not null" json:"expires_at"`             // 会话过期时间
	IsActive     bool      `gorm:"default:true" json:"is_active"`          // 会话是否活跃
	LastActivity time.Time `gorm:"not null" json:"last_activity"`          // 最后活动时间
}

// TableName 表名
func (LoginSession) TableName() string {
	return "star_login_sessions"
}

// TokenBlacklist token黑名单模型
// 用于存储已被拉黑的token，实现token失效机制
type TokenBlacklist struct {
	base_model.BaseModel
	Token     string    `gorm:"size:500;uniqueIndex;not null" json:"token"`          // 被拉黑的token
	TokenType string    `gorm:"size:20;not null;default:'access'" json:"token_type"` // token类型：access/refresh
	UserID    uint64    `gorm:"not null;index" json:"user_id"`                       // 用户ID
	Reason    string    `gorm:"size:100" json:"reason"`                              // 拉黑原因
	ExpiresAt time.Time `gorm:"not null" json:"expires_at"`                          // token原始过期时间
}

func (TokenBlacklist) TableName() string {
	return "star_token_blacklist"
}
